"""
俄罗斯方块的方块(Tetromino)类模块。
定义了方块的形状、行为和渲染。
"""
import random
from typing import List, Tuple, Optional

from tetris.constants import SHAPES, COLORS


class Tetromino:
    """表示一个俄罗斯方块的方块"""
    
    def __init__(self, x: int, y: int, shape_type: Optional[str] = None):
        """
        初始化方块
        
        Args:
            x: 方块的初始x坐标
            y: 方块的初始y坐标
            shape_type: 方块类型(I, J, L, O, S, T, Z)，如果为None则随机选择
        """
        self.x = x
        self.y = y
        self.rotation = 0
        
        # 如果没有指定形状，随机选择一个
        if shape_type is None:
            self.shape_type = random.choice(list(SHAPES.keys()))
        else:
            self.shape_type = shape_type
            
        self.shape = SHAPES[self.shape_type]
        self.color = COLORS[self.shape_type]
        
        # 确保没有额外的随机性
        if shape_type is not None:
            print(f"创建方块: {shape_type} 在位置 ({x}, {y})")
        
    def get_coords(self) -> List[Tuple[int, int]]:
        """
        获取方块当前位置的所有格子坐标
        
        Returns:
            坐标列表 [(x, y), ...]
        """
        shape_rotation = self.shape[self.rotation % len(self.shape)]
        return [(self.x + dx, self.y + dy) for dx, dy in shape_rotation]
    
    def rotate(self, clockwise: bool = True) -> None:
        """
        旋转方块
        
        Args:
            clockwise: 是否顺时针旋转，False为逆时针
        """
        if clockwise:
            self.rotation = (self.rotation + 1) % len(self.shape)
        else:
            self.rotation = (self.rotation - 1) % len(self.shape)
    
    def move(self, dx: int, dy: int) -> None:
        """
        移动方块
        
        Args:
            dx: x方向的移动量
            dy: y方向的移动量
        """
        self.x += dx
        self.y += dy 